#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define PORTM1M2 3550
#define PORTM2M3 3551
#define LOCALHOST "127.0.0.1"
#define BACKLOG 100

typedef struct {
	int estado;
	int ts;
	time_t start;
} maquina;

//Longitud: Tamaño de la cola
//Cantidad: Numero de botellas en cola; longitud =-1 -> proceso anterior finalizado
typedef struct {
	int longitud, cantidad;
	pthread_cond_t llena;
	pthread_cond_t vacia;
} Cola;

int isTimeValid(time_t start, int ts) {
	time_t end = time(NULL);
	return difftime(end, start) < ts;
}

int getCurrentSecond(time_t start, time_t end) {
	return difftime(end, start);
}

void error(char *msg) {
	perror(msg);
	exit(-1);
}

void headerM2M3() {
	printf("| tiempo | maquina| accion\t      \t | veloc.| l.cola| c.cola|\n");
}
void headerM1() {
	printf("| tiempo | maquina| accion\t      \t | veloc.\n");
}

void traceM1(char *accion, time_t start, int velocidad) {
	int end = getCurrentSecond(start, time(NULL));
	printf("| %d\t | Añadir | %s\t | %d\t \n", end, accion, velocidad);
}

void traceM2(char *accion, time_t start, int velocidad, Cola cola) {
	int end = getCurrentSecond(start, time(NULL));
	printf("| %d\t | Llenar | %s\t | %d\t | %d\t | %d\t |\n", end, accion, velocidad, cola.longitud, cola.cantidad);
}

void traceM3(char *accion, time_t start, int velocidad, Cola cola) {
	int end = getCurrentSecond(start, time(NULL));
	printf("| %d\t | Tapar  | %s\t | %d\t | %d\t | %d\t |\n", end, accion, velocidad, cola.longitud, cola.cantidad);
}

